package jp.ac.waseda.cs.washi.game.factory;

import java.util.ArrayList;

public class MapReader {

	private MapReader() {
	}

	public static int[][] read(String fileName) {
		int[][] array;
		ArrayList<String> lines;
		try {
			lines = new FileLineReader().read(fileName);
		}
		// file読み込みに失敗した場合　：　テストデータを入力とする
		catch (IllegalArgumentException e) {
			return getTestMap();
		}
		int w = lines.get(0).length();
		int h = lines.size();
		array = new int[h][w / 2 + 1];
		for (int i = 0; i < h; i++) {
			int k = 0;
			for (int j = 0; j < w; j++) {
				if (j % 2 == 0) {
					try {
						array[i][k] = Integer.parseInt(""
								+ lines.get(i).charAt(j));
					}
					// 入力ファイル内に誤ったデータが存在した場合　：　テストデータを入力とする
					catch (NumberFormatException e) {
						return getTestMap();
					}

					catch (ArrayIndexOutOfBoundsException e) {
						return getTestMap();
					}
					k++;
				}
			}
		}
		return array;
	}

	// テストデータ
	private static int[][] _defaultMap;
	
	private static int[][] getTestMap() {
		if (_defaultMap == null) {
			_defaultMap = new int[][] {
					{ 7, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 7 },
					{ 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 7 },
					{ 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 7 },
					{ 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 7 },
					{ 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 9, 1, 1, 1, 7 },
					{ 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 7 },
					{ 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 7 },
					{ 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 7 },
					{ 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 7 },
					{ 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 7 },
					{ 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 7 },
					{ 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 7 },
					{ 7, 1, 1, 1, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 7 },
					{ 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 7 },
					{ 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 7 },
					{ 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 7 },
					{ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6 }, };
		}
		return _defaultMap;
	}
}
